도커 (소프트웨어)
1. 개요
1. 개요
도커는 운영 체제 수준 가상화 기술을 활용하여 소프트웨어를 컨테이너라는 표준화된 단위로 패키징하고 실행하기 위한 오픈 소스 플랫폼이다. 도커사가 개발하며, 2013년 3월 13일 솔로몬 하익스에 의해 처음 공개되었다. 주로 Go 프로그래밍 언어로 작성되어 있으며, 리눅스, 윈도우, macOS와 같은 주요 운영 체제에서 동작한다.
도커의 핵심 가치는 애플리케이션과 그 실행에 필요한 모든 종속성을 컨테이너에 함께 묶어, 개발 환경부터 테스트, 프로덕션 환경에 이르기까지 어디서나 일관된 방식으로 실행될 수 있도록 보장하는 데 있다. 이는 "내 컴퓨터에서는 되는데"라는 문제를 근본적으로 해결하며, 데브옵스와 지속적 통합/지속적 배포 파이프라인을 구현하는 데 필수적인 기술로 자리 잡았다.
기존의 가상 머신이 각각 독립된 게스트 운영 체제를 필요로 하는 것과 달리, 도커 컨테이너는 호스트 시스템의 커널을 공유한다. 이로 인해 컨테이너는 가상 머신에 비해 훨씬 가볍고 빠르게 시작되며, 시스템 자원을 효율적으로 사용할 수 있다. 도커는 아파치 라이선스 2.0 하에 배포되는 자유 소프트웨어이다.
2. 역사
2. 역사
2.1. 도입
2.1. 도입
도커는 2013년 3월 13일에 처음 공개된 운영 체제 수준 가상화 플랫폼이다. 솔로몬 하익스가 dotCloud라는 서비스형 플랫폼 회사의 내부 프로젝트로 시작했으며, 이후 회사는 도커사로 사명을 변경했다. 이 프로젝트는 2013년 PyCon 컨퍼런스에서 대중에게 처음 선보였으며, 동년 3월에 오픈 소스로 공식 출시되었다.
초기 버전의 도커는 LXC를 기본 실행 환경으로 사용했으나, 2014년 출시된 0.9 버전부터는 Go 언어로 작성된 자체 라이브러리인 libcontainer로 교체되었다. 이는 도커가 리눅스 커널의 가상화 기능에 더 직접적으로 접근할 수 있는 독립적인 기반을 마련하는 계기가 되었다. 도커의 등장은 소프트웨어 개발과 배포 방식에 큰 변화를 가져왔으며, 컨테이너 기술의 대중화를 이끌었다.
도커는 출시 직후부터 주요 IT 기업들의 빠른 관심과 채택을 받았다. 2013년 9월에는 레드햇과의 협력을 통해 페도라와 레드햇 엔터프라이즈 리눅스에 통합되었고, 2014년 10월에는 마이크로소프트가 윈도우 서버에 도커 엔진을 통합하겠다고 발표하며 윈도우 생태계로의 확장을 시작했다. 또한 아마존 웹 서비스, IBM 클라우드 등 주요 클라우드 제공자들도 자사 서비스에 도커 컨테이너 지원을 빠르게 추가했다.
이러한 초기 도입과 확산은 도커가 데브옵스 문화와 마이크로서비스 아키텍처의 핵심 인프라로 자리 잡는 데 중요한 기반이 되었다. 도커는 애플리케이션을 컨테이너라는 표준화된 단위로 패키징하여, 로컬 개발 환경부터 프로덕션 클라우드 환경에 이르기까지 일관된 실행을 보장하는 데 기여했다.
3. 설계
3. 설계
도커의 설계는 운영 체제 수준 가상화 기술을 기반으로 한다. 이는 가상 머신과 달리 하드웨어 수준이 아닌 운영 체제 커널 수준에서 가상화를 구현하는 방식이다. 도커는 리눅스 커널이 제공하는 cgroups와 커널 네임스페이스 같은 기능을 활용하여 프로세스, 네트워크, 파일 시스템 등을 격리된 환경으로 실행한다. 이 설계 덕분에 각 컨테이너는 자체 파일 시스템, 라이브러리, 설정을 가지면서도 호스트의 커널을 공유하여 매우 가볍고 빠르게 구동될 수 있다.
도커의 핵심 설계 목표는 애플리케이션과 그 종속성을 하나의 표준화된 단위로 패키징하여, 어떠한 환경에서도 일관되게 실행되도록 하는 것이다. 이를 위해 도커 이미지라는 읽기 전용 템플릿을 사용하며, 이 이미지를 기반으로 실행되는 실체가 바로 도커 컨테이너이다. 설계 상 컨테이너는 기본적으로 휘발성이지만, 도커 볼륨을 통해 데이터를 영속적으로 관리할 수 있다.
이러한 경량화된 설계는 마이크로서비스 아키텍처와 높은 부합성을 보인다. 단일 호스트 시스템이나 가상 머신 위에 수십 개의 컨테이너를 밀집하여 실행할 수 있어 자원 활용도를 극대화한다. 또한 리눅스, 윈도우, macOS 등 다양한 플랫폼에서 동작하도록 설계되었으며, macOS나 윈도우에서는 내부적으로 리눅스 가상 머신을 통해 컨테이너 런타임을 제공한다.
4. 구성 요소
4. 구성 요소
도커 플랫폼은 서비스형 소프트웨어로 제공되며, 크게 도커 데몬, 도커 클라이언트, 그리고 다양한 도커 객체로 구성된다. 이 구성 요소들은 함께 작동하여 컨테이너의 생명주기를 관리한다.
핵심 구성 요소 중 하나는 도커 데몬(dockerd)이다. 이는 도커 엔진의 핵심 프로세스로, 컨테이너를 생성, 실행, 모니터링하는 역할을 담당한다. 데몬은 REST API를 통해 전송되는 요청을 수신하고 처리한다. 사용자는 도커 클라이언트(docker)라는 명령줄 인터페이스를 통해 데몬과 상호작용하며, 컨테이너 관련 명령을 내린다.
도커 객체는 애플리케이션을 구성하는 주요 엔티티들이다. 이에는 도커 이미지, 도커 컨테이너, 도커 서비스가 포함된다. 이미지는 컨테이너를 생성하기 위한 읽기 전용 템플릿이며, 컨테이너는 이 이미지를 기반으로 실행되는 격리된 환경이다. 서비스는 스웜 모드에서 여러 도커 엔진에 걸쳐 컨테이너를 확장할 수 있게 해준다. 또한 도커 레지스트리는 이미지를 저장하고 배포하는 저장소 역할을 하며, 도커 허브가 대표적인 공개 레지스트리이다.
5. 라이선스 모델
5. 라이선스 모델
도커의 라이선스 모델은 사용하는 제품과 구성 요소에 따라 다르다. 핵심 오픈소스 엔진과 기업용 상용 제품이 혼합된 형태로 제공된다.
도커 엔진의 핵심 소프트웨어는 아파치 라이선스 2.0에 따라 라이선스가 부여된다. 이는 자유 소프트웨어 라이선스로, 사용자가 소프트웨어를 자유롭게 사용, 수정, 재배포할 수 있음을 의미한다. 따라서 리눅스 배포판에 포함된 도커 엔진이나 커맨드라인 도구는 일반적으로 무료로 사용할 수 있다.
반면, 통합 개발 환경인 도커 데스크톱은 더 복합적인 라이선스 구조를 가진다. 도커 데스크톱은 소규모 기업, 개인 개발자, 교육 기관을 위한 무료 계층을 제공한다. 그러나 2021년 8월부터 직원 수 250명 이상이거나 연 매출 1천만 달러 이상인 대기업은 유료 구독을 해야 한다. 도커 데스크톱 패키지 내에는 GNU 일반 공중 사용 허가서(GPL)와 같은 다른 오픈소스 라이선스가 적용된 구성 요소도 포함되어 있을 수 있다.
6. 주요 기능
6. 주요 기능
도커의 주요 기능은 애플리케이션을 컨테이너라는 경량 패키지로 만들어 개발, 배포, 실행을 단순화하는 데 있다. 이는 운영 체제 수준 가상화 기술을 활용하여, 애플리케이션과 그 실행에 필요한 모든 라이브러리, 설정 파일, 런타임 환경을 하나의 독립된 단위로 묶는다. 결과적으로 "내 컴퓨터에서는 되는데"라는 문제를 해결하며, 로컬 환경, 테스트 서버, 프로덕션 서버 등 어떠한 환경에서도 동일하게 실행될 수 있는 이식성을 보장한다.
도커의 핵심 기능은 도커 이미지와 도커 컨테이너 개념을 중심으로 작동한다. 이미지는 애플리케이션을 실행하기 위한 읽기 전용 템플릿이며, Dockerfile이라는 설정 스크립트를 통해 빌드 과정을 자동화하고 재현할 수 있다. 이 이미지를 기반으로 실행된 실제 인스턴스가 컨테이너로, 호스트 시스템의 커널을 공유하면서도 프로세스, 네트워크, 파일 시스템이 격리된 환경에서 작동한다. 이를 통해 하나의 서버나 가상 머신 위에 수십 개의 경량 컨테이너를 효율적으로 동시에 운영할 수 있다.
또한, 다중 컨테이너 애플리케이션을 관리하기 위한 도커 컴포즈와 데이터를 영구적으로 보존하기 위한 도커 볼륨 기능을 제공한다. 도커 허브와 같은 레지스트리를 통해 공개 또는 비공개 이미지를 공유하고 배포할 수 있어, 개발 생산성을 크게 향상시킨다. 이러한 기능들은 데브옵스 문화와 마이크로서비스 아키텍처의 확산에 중요한 기여를 했다.
7. 도커 데스크톱
7. 도커 데스크톱
도커 데스크톱은 윈도우와 macOS 운영 체제에서 도커 컨테이너를 손쉽게 개발하고 실행할 수 있도록 설계된 통합 애플리케이션이다. 이 애플리케이션은 도커 엔진, 도커 CLI, 도커 컴포즈, 쿠버네티스 등 컨테이너 개발에 필요한 핵심 도구들을 하나의 패키지로 묶어 제공한다. 특히 윈도우와 macOS는 기본적으로 리눅스 커널을 공유하지 않기 때문에, 도커 데스크톱은 내부적으로 가상 머신을 활용하여 리눅스 컨테이너 실행 환경을 구축한다.
도커 데스크톱은 사용자 친화적인 그래픽 사용자 인터페이스를 제공하여 컨테이너, 이미지, 볼륨, 네트워크를 시각적으로 관리할 수 있게 한다. 또한, 명령줄 인터페이스를 통한 세밀한 제어도 가능하다. 주요 기능으로는 로컬 개발 환경과의 원활한 통합, 호스트와 컨테이너 간의 파일 동기화, 내장 쿠버네티스 클러스터 지원 등이 있다.
라이선스 정책에 따르면, 도커 데스크톱은 소규모 기업, 개인 개발자, 교육 기관 등에게는 무료로 제공되지만, 대규모 기업 사용자에게는 유료 구독이 필요하다. 이는 2021년에 도입된 정책으로, 리눅스 배포판에서 사용되는 오픈 소스 도커 엔진에는 영향을 미치지 않는다. 도커 데스크톱은 개발자의 생산성을 높이고 데브옵스 워크플로우를 가속화하는 데 중요한 역할을 한다.
8. 도커 허브
8. 도커 허브
도커 허브는 도커사가 운영하는 공개 컨테이너 레지스트리이다. 사용자는 이 플랫폼에서 공식적으로 제공되는 이미지나 커뮤니티가 공유한 이미지를 검색하고 다운로드(pull)할 수 있으며, 자신이 빌드한 컨테이너 이미지를 업로드(push)하여 공개하거나 비공개로 관리할 수 있다. 도커 클라이언트의 기본 레지스트리로 설정되어 있어, 사용자가 별도의 주소를 지정하지 않아도 도커 허브에서 이미지를 찾아온다.
도커 허브는 공개 저장소 외에도 비공개 저장소, 자동화된 빌드, 보안 스캔, 팀 협업 도구 등 다양한 기능을 제공한다. 이를 통해 개발자와 조직은 애플리케이션의 빌드 자동화 및 배포 파이프라인을 효율적으로 구성할 수 있다. 주요 클라우드 서비스 제공자들과의 통합도 지원되어 CI/CD 워크플로우에 쉽게 통합된다.
기능 | 설명 |
|---|---|
공개 저장소 | |
비공개 저장소 | 조직 내부에서만 접근 가능한 이미지 저장소 |
자동화된 빌드 | |
보안 취약점 스캔 | 이미지 내 알려진 취약점 분석 |
도커 허브의 존재는 컨테이너화 생태계의 확산에 핵심적인 역할을 했다. 표준화된 이미지 저장 및 공유 방식을 제공함으로써, 개발자들이 애플리케이션과 그 런타임 환경을 손쉽게 패키징하고 전 세계 어디서나 동일하게 실행할 수 있는 기반을 마련했다.
9. 도커 엔진
9. 도커 엔진
도커 엔진은 도커 플랫폼의 핵심 런타임 구성 요소이다. 이 엔진은 컨테이너를 생성, 실행, 관리하는 책임을 맡는다. 사용자가 도커 클라이언트를 통해 명령을 내리면, 도커 엔진은 이를 처리하여 이미지로부터 컨테이너를 인스턴스화하고, 필요한 리소스를 할당하며, 격리된 환경에서 애플리케이션 프로세스를 실행한다.
도커 엔진의 설계는 리눅스 커널의 cgroups와 네임스페이스 같은 운영 체제 수준의 가상화 기술을 활용한다. 이를 통해 각 컨테이너는 파일 시스템, 네트워크 스택, 프로세스 공간이 서로 격리되면서도, 호스트 시스템의 커널을 공유하여 가상 머신에 비해 훨씬 가볍고 빠르게 동작할 수 있다. 도커 엔진은 리눅스, 윈도우, macOS와 같은 다양한 호스트 운영 체제에서 작동하도록 설계되었다.
도커 엔진의 주요 구성 요소로는 상주 프로세스인 도커 데몬(dockerd)과 REST API, 그리고 이를 사용하는 CLI 도구가 있다. 데몬은 이미지 관리, 컨테이너 네트워킹, 데이터 볼륨 관리 등 모든 백엔드 작업을 수행한다. 사용자는 CLI를 통해 데몬과 상호작용하며, 이 아키텍처는 클라이언트-서버 모델을 따른다.
도커 엔진은 아파치 라이선스 2.0 하에 배포되는 오픈 소스 소프트웨어이다. 이는 도커의 핵심 런타임 기술이 자유롭게 사용, 수정, 배포될 수 있음을 의미하며, 도커 데스크톱 같은 상용 제품의 기반이 된다.
10. 도커 컴포즈
10. 도커 컴포즈
도커 컴포즈는 다중 컨테이너로 구성된 도커 애플리케이션을 정의하고 실행하기 위한 도구이다. 단일 호스트 상에서 여러 컨테이너가 필요한 웹 애플리케이션, 데이터베이스, 캐시 서버 등의 서비스 스택을 관리하는 데 유용하다. 사용자는 YAML 형식의 docker-compose.yml 파일을 통해 애플리케이션에 필요한 모든 서비스, 네트워크, 볼륨 구성을 정의할 수 있다.
이 도구를 사용하면 docker-compose up 하나의 명령어로 정의된 모든 서비스의 컨테이너를 생성하고 시작할 수 있어, 개발 및 테스트 환경 구성을 크게 단순화한다. 또한 docker-compose down 명령으로 관련 컨테이너, 네트워크를 한꺼번에 정리할 수 있어 편의성을 제공한다. 도커 컴포즈는 특히 마이크로서비스 아키텍처나 로컬 개발 환경에서의 복잡한 서비스 간 의존성 관리에 널리 활용된다.
11. 도커 스카우트
11. 도커 스카우트
도커 스카우트는 도커 생태계 내에서 컨테이너 이미지와 소프트웨어 공급망의 보안 및 품질을 분석하고 관리하기 위한 도구이다. 이 도구는 개발 및 운영 팀이 애플리케이션의 취약점을 사전에 식별하고, 오픈 소스 라이선스 준수성을 확인하며, 컨테이너 이미지의 구성 요소를 가시화하도록 돕는다. 도커 스카우트는 지속적 통합 및 지속적 배포 파이프라인에 통합되어 소프트웨어 개발 수명 주기 초기부터 보안과 품질 관리를 가능하게 한다.
주요 기능으로는 컨테이너 이미지에 포함된 소프트웨어 빌드 재료 목록을 자동으로 생성하고, 알려진 취약점 데이터베이스와 지속적으로 비교하여 보안 문제를 탐지하는 것이 있다. 또한, 사용된 오픈 소스 패키지의 라이선스를 검사하여 법적 위험을 줄이고, 이미지 간 비교를 통해 개선 사항을 제안한다. 이러한 분석 결과는 도커 데스크톱, 도커 허브 또는 CI/CD 도구의 대시보드를 통해 확인할 수 있다.
도커 스카우트는 소프트웨어 공급망 보안 강화라는 현대적인 개발 요구에 부응하며, 데브옵스 관행에 보안을 통합하는 DevSecOps 문화를 실현하는 데 기여한다. 이를 통해 팀은 더 안전하고 품질 높은 컨테이너 기반 애플리케이션을 효율적으로 배포할 수 있다.
